﻿using Abp;
using ARchGL.Platform.Utils;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
using WebApiClient.DataAnnotations;

namespace ARchGL.Platform.Jianwei
{
    public class DesEncryptKeyBase
    {
        public string _SecrytKey = "23#$aI3e@Igv2015ACnro3%^*"; //Des秘钥配置
    }

    [Serializable]
    public class AjaxServerResponse : DesEncryptKeyBase
    {
        public AjaxServerResponse()
        {
        }
        /// <summary>
        /// 接口调用失败或错误时，返回相应的提示信息
        /// </summary>
        [AliasAs("errmsg")]

        public string Message { get; set; }
        /// <summary>
        /// 成功返回0，失败或错误返回非0的值
        /// </summary>
        [AliasAs("errcode")]
        public int Code { get; set; }

        /// <summary>
        /// 是否成功
        /// </summary>
        [AliasAs("success")]
        public bool Success
        {
            get => Code == 0;
        }
    }

    [Serializable]
    public class AjaxClientResponse : DesEncryptKeyBase
    {
        public AjaxClientResponse()
        {
        }
        /// <summary>
        /// 返回类型: -3（考勤数据为空）,-2（设备序列号不存在）, -1（服务器异常-失败）， 0（空闲-成功）
        /// </summary>
        [AliasAs("Result")]
        [JsonProperty("Result")]
        public EnumResponseResult Result { get; set; }
        /// <summary>
        /// 返回内容（加密）
        /// </summary>
        [AliasAs("Content")]
        [JsonProperty("Content")]
        public string Content { get; set; }
        /// <summary>
        /// 返回消息
        /// </summary>
        [AliasAs("Msg")]
        [JsonProperty("Msg")]
        public string Message { get; set; }

        [JsonProperty("Success")]
        public bool Success { get => Result == EnumResponseResult.成功; }

        /// <summary>
        /// 返回内容(解密)
        /// </summary>
        [JsonProperty("ContentDes")]
        public string ContentDes
        {
            get
            {
                string value = "";
                try
                {
                    if (Success && !string.IsNullOrWhiteSpace(Content))
                    {
                        value = DES.Decode(Content, _SecrytKey);
                    }
                }
                catch (global::System.Exception)
                {
                    value = "解密失败";
                }
                return value;
            }
        }
    }
    public class AjaxClientResponse<T> : AjaxClientResponse
    {
        /// <summary>
        /// 返回结果
        /// </summary>

        [JsonProperty("Data")]
        public T Data
        {
            get
            {
                try
                {
                    if (Success && !string.IsNullOrWhiteSpace(ContentDes) && typeof(T) != null)
                    {
                        return JsonConvert.DeserializeObject<T>(ContentDes);
                    }
                }
                catch (global::System.Exception)
                {
                }
                return default(T);
            }
        }
    }

    public enum EnumResponseResult
    {
        反馈类型不能为空 = -3,
        设备序列号不存在 = -2,
        服务器异常失败 = -1,
        成功 = 0
    }
}
